perm filename BLURB.PUB[L70,TES] blob sn#009958 filedate 1972-09-27 generic text, type T, neo UTF8
00100	The following is slightly out-of-date and  slightly  inaccurate,  but
00200	gives the correct flavor.
00300	
00400	
00500	LISP70  is intended to be an improvement on LISP 1.6 in the following
00600	ways:
00700	
00800	/A/	Extendability.		Programs may be written in  SEXPR-70,
00900	which is compatible with LISP, or in MEXPR-70, an Algol-like notation
01000	that may be extended or modified by the user to suit  his  notational
01100	preferences.   The concept of "entity" subsumes the concepts of atom,
01200	list, variable, and constant.  Every entity has  a  "type"  property,
01300	and depending on the type, may have other properties as well, such as
01400	"name", "value", "car", etc.  Various access methods can be  used  to
01500	find  and  process entities, depending on their scope, type, or other
01600	features.  The repertoire of  access  methods  and  types  is  easily
01700	augmented  to  improve both notational convenience and implementation
01800	efficiency.  All levels of the system are written in a parametric and
01900	flexible  manner  to enable extensions and modifications to be easily
02000	made.  Machine-dependent portions of the system are clearly  isolated
02100	to assist in the implementation of LISP70 on other computers.
02200	
02300	/B/	Backtracking.		In problems involving exploration  of
02400	a  problem  tree  or  maze, primitives are provided to save, restore,
02500	delete, and re-order states of the search.  From these primitives,  a
02600	variety  of depth-first and breadth-first search functions are easily
02700	defined.
02800	
02900	/C/	Pattern Matching.	Programs can be driven  not  only  by
03000	recursive functions but also by pattern rewrite rules.  A rule can be
03100	activated by referring to its name or by a standard  or  user-defined
03200	finding  algorithm.  These facilities are extremely useful in parsing
03300	and theorem proving.
03400	
03500	/D/	Processes.		The FUNARG device is  generalized  to
03600	allow  coroutines  with OWN variables that are preserved from call to
03700	call.  Normal functions are the special case of processes with no OWN
03800	variables that are created when called and destroyed when exited.
03900	
04000	/E/	Storage Allocation.	Storage   spaces  for  each  type  of
04100	entity (car-cdr, atom, binary program,  local  variables,  etc.)  are
04200	allocated  dynamically.  System routines are shared in upper segment.
04300	Thus, a job can start in a small core image and adjust  its  size  as
04400	needed.  Descriptors of functions and of large data structures have a
04500	presence bit so their referents can be swapped in and out by segments
04600	or by pages.